package temp.helloworld.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.Session;
import lotus.domino.View;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;

import temp.helloworld.diiop.DIIOPHelper;
import temp.helloworld.log.LoggerHelper;
import temp.helloworld.properties.PropertiesHelper;

/**
 * 
 * @author iceeer 使用StatefulJob代替Job解决执行多次问题
 *         Quartz表达式解析：http://tangshuo.iteye.com/blog/184824 "0 0 12 * * ?"
 *         每天中午12点触发 "0 15 10 ? * *" 每天上午10:15触发 "0 15 10 * * ?" 每天上午10:15触发
 *         "0 15 10 * * ? *" 每天上午10:15触发 "0 15 10 * * ? 2005" 2005年的每天上午10:15触发
 *         "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 "0 0/5 14 * * ?"
 *         在每天下午2点到下午2:55期间的每5分钟触发 "0 0/5 14,18 * * ?"
 *         在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "0 0-5 14 * * ?"
 *         在每天下午2点到下午2:05期间的每1分钟触发 "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
 *         "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 "0 15 10 15 * ?" 每月15日上午10:15触发
 *         "0 15 10 L * ?" 每月最后一日的上午10:15触发 "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
 *         "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
 *         "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
 */
public class MyJob implements StatefulJob {

	/**
	 * 需要定时调度的方法
	 */
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		Date dtStart = new Date();
		System.out.println("PEOPLE:我是被定时调度的方法啊，当前时间为："
				+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS")
						.format(dtStart));

		try {
			Integer count = 0;
			Session session = DIIOPHelper.createSession();
			LoggerHelper.logger.warn("PEOPLE:START USE "
					+ session.getCommonUserName());

			Database db = session.getDatabase(session.getServerName(),
					PropertiesHelper.getProperty("names.file.name"));
			View vwPeoples = db.getView(PropertiesHelper
					.getProperty("names.people.view.name"));//

			vwPeoples.setAutoUpdate(false);
			Document docName = vwPeoples.getFirstDocument();
			while (docName != null) {
				LoggerHelper.logger.debug(docName
						.getItemValueString("FullName"));
				count += 1;
				docName = vwPeoples.getNextDocument(docName);
			}
			vwPeoples.setAutoUpdate(true);

			Date dtEnd = new Date();
			LoggerHelper.logger.warn("PEOPLE:"
					+ count
					+ ":END:"
					+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS")
							.format(new Date()));
			LoggerHelper.logger
					.warn("PEOPLE:SPEND TIME:"
							+ (dtEnd.getTime() - dtStart.getTime()) / 60000
							+ " Minute");
			session.recycle();
		} catch (Exception e) {
			LoggerHelper.logger.warn("", e);
		}
	}

	public static void main(String[] args) {
		LoggerHelper.logger.debug("main");

	}
}
